package study.java.jdk.jdk8._6_reference;//package study.jdk.jdk8._6_reference;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.Comparator;

/**
 * 方法引用:
 * （1）方法引用通过方法的名字来指向一个方法
 * （2）方法引用可以使语言的构造更紧凑简洁，减少冗余代码
 * （3）方法引用使用一对冒号 ::
 */
@Slf4j
public class Ref_01_Test {

    /**
     * 指向静态方法的方法引用，例如Integer的parseInt方法，可以写成Integer::parseInt
     * 类::静态方法名
     */
    @Test
    public void test1() {
        // 类::静态方法名
        Comparator<Integer> bb = Integer::compare;
        log.info("{}", bb.compare(1, 2));

        Comparator<Integer> cc = (x, y) -> Integer.compare(x, y);
        log.info("{}", cc.compare(1, 2));
    }

    /**
     *
     */
//    @Test
//    public void test() {
//        //构造器引用：它的语法是Class::new，或者更一般的Class<T>::new
//        Car car = Car.create(Car::new);
//        Car car1 = Car.create(Car::new);
//        Car car2 = Car.create(Car::new);
//        Car car3 = new Car();
//        List<Car> carLt = Arrays.asList(car, car1, car2, car3);
//
//        //静态方法引用：它的语法是 Class::static_method
//        carLt.forEach(Car::collide);
//        //特定类的任意对象的方法引用：它的语法是 Class::method
//        carLt.forEach(Car::repair);
//        //特定对象的方法引用：它的语法是 instance::method
//        final Car police = Car.create(Car::new);
//        carLt.forEach(police::follow);
//    }

}
